package com.study.design.pattern.pattern.behavioral.state;

/**
 * 已发货状态
 * 允许操作：确认收货
 * 禁止操作：支付、取消、重复发货
 */
public class ShippedState implements OrderState {
    /**
     * 已发货状态下禁止支付
     */
    @Override
    public void pay(OrderContext context) {
        System.out.println("错误操作：已发货订单不能支付");
    }

    /**
     * 已发货状态下禁止取消
     */
    @Override
    public void cancel(OrderContext context) {
        System.out.println("错误操作：已发货订单不能取消");
    }

    /**
     * 已发货状态下禁止重复发货
     */
    @Override
    public void ship(OrderContext context) {
        System.out.println("错误操作：订单已处于发货状态");
    }

    /**
     * 处理确认收货操作：将状态变更为已完成
     */
    @Override
    public void receive(OrderContext context) {
        System.out.println("用户已确认收货");
        context.setState(new CompletedState());
    }
}